package com.example.controller;

import com.example.common.Result;
import com.example.entity.KnowledgeSpace;
import com.example.service.KnowledgeSpaceService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/knowledge")
public class KnowledgeSpaceController {

    @Autowired
    private KnowledgeSpaceService knowledgeSpaceService;

    /**
     * 获取用户可访问的知识空间列表
     */
    @GetMapping("/spaces")
    public Result getAccessibleSpaces(@RequestParam String username) {
        try {
            if (username == null || username.trim().isEmpty()) {
                return Result.error("用户名不能为空");
            }

            List<KnowledgeSpace> spaces = knowledgeSpaceService.getUserAccessibleSpaces(username);
            return Result.success(spaces);
        } catch (Exception e) {
            return Result.error("获取知识空间列表失败: " + e.getMessage());
        }
    }

    /**
     * 根据ID获取知识空间详情
     */
    @GetMapping("/spaces/{spaceId}")
    public Result getSpaceById(@PathVariable Integer spaceId, @RequestParam String username) {
        try {
            if (spaceId == null || spaceId <= 0) {
                return Result.error("空间ID不能为空或无效");
            }
            if (username == null || username.trim().isEmpty()) {
                return Result.error("用户名不能为空");
            }

            // 检查用户是否有查看权限 - 暂时禁用权限控制
            // if (!knowledgeSpaceService.hasViewPermission(spaceId, username)) {
            // return Result.error("没有访问该知识空间的权限");
            // }

            KnowledgeSpace space = knowledgeSpaceService.getSpaceById(spaceId);
            if (space == null) {
                return Result.error("知识空间不存在");
            }

            return Result.success(space);
        } catch (Exception e) {
            return Result.error("获取知识空间详情失败: " + e.getMessage());
        }
    }

    /**
     * 创建新的知识空间
     */
    @PostMapping("/spaces")
    public Result createSpace(@RequestBody KnowledgeSpace space, @RequestParam String username) {
        try {
            if (space == null) {
                return Result.error("空间信息不能为空");
            }
            if (username == null || username.trim().isEmpty()) {
                return Result.error("创建者用户名不能为空");
            }
            if (space.getSpaceName() == null || space.getSpaceName().trim().isEmpty()) {
                return Result.error("空间名称不能为空");
            }
            if (space.getSpaceType() == null || space.getSpaceType().trim().isEmpty()) {
                return Result.error("空间类型不能为空");
            }
            if (space.getVisibility() == null || space.getVisibility().trim().isEmpty()) {
                return Result.error("可见性不能为空");
            }

            // 设置创建者用户名
            space.setCreatorUsername(username);

            int result = knowledgeSpaceService.createSpace(space);
            if (result > 0) {
                return Result.success("知识空间创建成功");
            } else {
                return Result.error("知识空间创建失败");
            }
        } catch (Exception e) {
            return Result.error("创建知识空间失败: " + e.getMessage());
        }
    }

    /**
     * 更新知识空间信息
     */
    @PutMapping("/spaces/{spaceId}")
    public Result updateSpace(@PathVariable Integer spaceId, @RequestBody KnowledgeSpace space,
            @RequestParam String username) {
        try {
            if (spaceId == null || spaceId <= 0) {
                return Result.error("空间ID不能为空或无效");
            }
            if (space == null) {
                return Result.error("空间信息不能为空");
            }
            if (username == null || username.trim().isEmpty()) {
                return Result.error("用户名不能为空");
            }

            // 检查用户是否有管理权限 - 暂时禁用权限控制
            // if (!knowledgeSpaceService.hasManagePermission(spaceId, username)) {
            // return Result.error("没有管理该知识空间的权限");
            // }

            // 获取现有空间信息，保留创建者信息
            KnowledgeSpace existingSpace = knowledgeSpaceService.getSpaceById(spaceId);
            if (existingSpace == null) {
                return Result.error("要更新的知识空间不存在");
            }

            space.setSpaceId(spaceId);
            // 保留原有的创建者信息，不允许修改
            space.setCreatorUsername(existingSpace.getCreatorUsername());
            int result = knowledgeSpaceService.updateSpace(space);
            if (result > 0) {
                return Result.success("知识空间更新成功");
            } else {
                return Result.error("知识空间更新失败");
            }
        } catch (Exception e) {
            return Result.error("更新知识空间失败: " + e.getMessage());
        }
    }

    /**
     * 删除知识空间
     */
    @DeleteMapping("/spaces/{spaceId}")
    public Result deleteSpace(@PathVariable Integer spaceId, @RequestParam String username) {
        try {
            if (spaceId == null || spaceId <= 0) {
                return Result.error("空间ID不能为空或无效");
            }
            if (username == null || username.trim().isEmpty()) {
                return Result.error("用户名不能为空");
            }

            // 检查用户是否有管理权限 - 暂时禁用权限控制
            // if (!knowledgeSpaceService.hasManagePermission(spaceId, username)) {
            // return Result.error("没有删除该知识空间的权限");
            // }

            int result = knowledgeSpaceService.deleteSpace(spaceId);
            if (result > 0) {
                return Result.success("知识空间删除成功");
            } else {
                return Result.error("知识空间删除失败");
            }
        } catch (Exception e) {
            return Result.error("删除知识空间失败: " + e.getMessage());
        }
    }

    /**
     * 检查用户对空间的权限
     */
    @GetMapping("/spaces/{spaceId}/permission")
    public Result getUserPermission(@PathVariable Integer spaceId, @RequestParam String username) {
        try {
            if (spaceId == null || spaceId <= 0) {
                return Result.error("空间ID不能为空或无效");
            }
            if (username == null || username.trim().isEmpty()) {
                return Result.error("用户名不能为空");
            }

            // 暂时禁用权限控制 - 直接返回管理员权限
            // String role = knowledgeSpaceService.getUserSpaceRole(spaceId, username);
            // if (role == null) {
            // return Result.error("没有访问该知识空间的权限");
            // }

            return Result.success("admin"); // 暂时返回管理员权限
        } catch (Exception e) {
            return Result.error("获取权限信息失败: " + e.getMessage());
        }
    }
}